[iOS 7] アプリ開発入門 1からはじめるiOS7 – StoryBoardで画面遷移
画面遷移を実装する
複数の画面で構成するアプリケーションの場合は、当然画面遷移が必要です。
今回は、Storyboardを利用して親画面から子画面へ遷移する実装を行います。
目標
親画面のボタンをタップすると子画面へ遷移させます
実装
Viewの中にボタンが一つだけ配置されています
配置されているView Controllerの隣にView Controllerを追加します
はじめの画面のボタンをCtrl を押しながらドラッグし、先ほど追加したView Controllerに接続させます
ダイアログが表示されるのpushを選択します
Actionが設定されました
これでよい気がするので、実行してみます
エラー!
ボタンを押した瞬間にアプリケーションが停止してしまいました。
2013-09-09 12:09:47.137 Hello Story Board[1088:60b] *** Terminating app due to uncaught exception 'NSGenericException', reason: 'Push segues can only be used when the source controller is managed by an instance of UINavigationController.' *** First throw call stack: (0x2ebf5f8b 0x38bc96af 0x3157ad35 0x310fe71f 0x310fe6bf 0x310fe699 0x310e9b9f 0x310fe10f 0x310fdde1 0x310f8e6d 0x310cda6d 0x310cc271 0x2ebc117b 0x2ebc064b 0x2ebbee3f 0x2eb29cd7 0x2eb29abb 0x3356f2db 0x3112e121 0x533b9 0x390edab7) libc++abi.dylib: terminating with uncaught exception of type NSException
Push segues can only be used when the source controller is managed by an instance of UINavigationController.
「PushセグエはUINavigationControllerによって管理されたsource controllerのみ利用可能」のようなことが書いてありますね。
どうやらUINavigationControllerというクラスが必要なようです
Navigation Controllerとは
親画面から子画面へ遷移させるなど、階層的な画面構成を持つ場合に必要なクラスのようです。
UINavigationController
呼び出し元の画面へ戻るためのボタンなども自動的に生成してくれるようです
UINavigationControllerを追加する
先ほどのStoryBoardにNavigationControllerを追加します
NavigationControllerとTableViewが追加されるので、TableViewを削除します。さらに消えかけの矢印があるので、こちらは追加したNavigationControllerへ移動します。
これはアプリ起動時にどれを起動するかを示す矢印のようです。
NavigationControllerから、Ctrlを押しながら、CmViewController へドラッグします
ダイアログが表示されます。Relationship Segue > root view controller をクリックします
NavigationControllerが設定されました
各Componentのプロパティ設定の確認
それぞれどのような設定になっているのかを見てみます
Navigation Controller
下矢印(?)のアイコンを選択します
Is Initial View Controller という項目にチェックが入っています
一番右の横矢印を選択します
小さいですが、root view controller - * Cm View Controller と設定されています
Cm View Controller
一番右の横矢印を選択します
Presenting Seguesのrelationshipに値が設定されています
View Controller
一番右の横矢印を選択します
Presenting Seguesのpushに値が設定されています
再度実行する
再度実行してみます
Next View をタップします
遷移完了。backボタンが徐々に表示されているのが分かります。これを押すと、呼び出し元のCm View Controllerへ戻ります
ようやく画面遷移が行えるようになりました
まとめ
親画面から子画面への画面遷移を行う場合は、UINavigationControllerを利用すること